#include<queue>
#include<iostream>
const int N=1<<24;
using namespace std;
int g[N+1],state[N+1];
int ans[24];
int cz[13][5];
int choice[N+1];

struct node{
    int state;
    int F=0;
    node(int s):state(s){
        int h=0;
        for(int i=0;i<12;i++){
            if((s>>(i*2))&3)h+=4-((s>>(i*2))&3);
        }
        F=h+g[s];
    }
    bool operator<(const node &y)const{
        return F>y.F;
    }
};
priority_queue<node>q;
int fa[N];
int main(){
    int s=0;
    for(int i=1;i<=12;i++){
        int a;
        cin>>a;
        s|=(a-1)<<((i-1)*2);
        for(int j=0;j<4;j++){
            cin>>cz[i][j];
        }
    }
    q.push(node(s));
    g[s]=0;
    int zt,nx,ztnx,nextstate;
    while(!q.empty()){
        int state=q.top().state;
        q.pop();
        if(state==0)break;
        for(int i=1;i<=12;i++){
             zt=(state>>(2*(i-1)))&3;
             nx=cz[i][zt];
             ztnx=(state>>(2*(nx-1)))&3;
            nextstate=state^(zt<<(2*(i-1)))^(((zt+1)&3)<<((i-1)*2));
            nextstate=nextstate^(ztnx<<(2*(nx-1)))^(((ztnx+1)&3)<<((nx-1)*2));
            if(!g[nextstate]){
                g[nextstate]=g[state]+1;
                fa[nextstate]=state;
                choice[nextstate]=i;
                q.push(node(nextstate));
            }
        }
    }
    int anss=0;
    int state=0;
    while(state!=s){
        ans[++anss]=choice[state];
        state=fa[state];
    }
    cout<<anss<<endl;
    for(int i=anss;i>=1;i--){
        cout<<ans[i]<<" ";
    }
return 0;

}